/*
 * pricer.hpp
 *
 *  Created on: Mar 13, 2009
 *      Author: genady
 */

#ifndef PRICER_HPP_
#define PRICER_HPP_

#include "product_types.hpp"
#include "pricer_type.hpp"

using namespace std;

class pricer
{
public:
	pricer(product_type _product=STOCK, pricer_type _pricer=BHM_ZERO_RISK_PRICER);
	// _strikePrice - price at t0 (0 <= _strikePrice)
	// _time - time period (years)
	// _expectedRate - expected return per annum (0 <= mean <= 1);
	// _volatility - volatility per annum (0 <= rms <= 1)
	// _confidence - confidence level (0 < conf < 1)
	pair<double,double> evaluate (double _strikePrice, double _time, double _expectedRate, double _volatility, double _confidence );

private:
	pair<double,double> evaluateMC (double _strikePrice, double _time, double _expectedRate, double _volatility, double _confidence );
	pair<double,double> evaluateBHM (double _strikePrice, double _time, double _expectedRate, double _volatility, double _confidence );

	product_type theType;
	pricer_type thePricer;
};

#endif /* PRICER_HPP_ */
